package es.fuenteperez.xstream.main;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import com.thoughtworks.xstream.XStream;

import es.fuenteperez.xstream.modelo.Autor;
import es.fuenteperez.xstream.modelo.Blog;
import es.fuenteperez.xstream.modelo.Entrada;

public class TestEscritura {

	/**
	 * @param args
	 * @throws FileNotFoundException 
	 */
	public static void main(String[] args){
		
		try {
			
			System.out.println("Comienza el test escritura de XStream ...");
			
			//Creamos un objeto Blog
			Blog blog = new Blog();
			
			//Creamos un autor y se lo asociamos al blog
			Autor autor = new Autor("Edgard Allan Poe");
			blog.setAutor(autor);
			
			//A continuacion creamos una serie de entradas para posteriomente asocialas al Blog
			Entrada entrada1 = new Entrada("El Gato Negro", "Varios relatos desafortunados");
			Entrada entrada2 = new Entrada("Corazon Delator", "Poesia de gran contenido emosional");
			Entrada entrada3 = new Entrada("otras Obras", "Varias obras");
			
			blog.add(entrada1);
			blog.add(entrada2);
			blog.add(entrada3);
			
			//Creamos una instancia de Xtream
	        XStream xstream = new XStream();
	        
	        //Instanciamos el metodo toXML pasamos como atributos el objeto Blog y un FileOutputStream
	        xstream.toXML(blog, new FileOutputStream("testXStrem1.xml"));
	        
	        
	        //XStream nos da direntes opciones a la hora de nombrar los nodos del fichero XML
	        //para cambiar por ejemplo <es.fuenteperez.xstream.modelo.Autor> por Autor utilizamos el metodo alias
	        
	        xstream.alias("blog", Blog.class);
	        xstream.alias("autor", Autor.class);
	        xstream.alias("entrada", Entrada.class);
	        
	        xstream.toXML(blog, new FileOutputStream("testXStremAlias.xml"));
	        
	        //Existen otras opciones como omitir por ejemplo el nombre de las colecciones
	        //en nuestro caso podemos realizarlo sobre la coleccion entradas
	        
	        //Omitir el tag 'entradas', utilizamos el metodo addImplicitCollection
	        xstream.addImplicitCollection(Blog.class, "entradas");
	        xstream.toXML(blog, new FileOutputStream("testXStremOmitirTags.xml"));
	        
	        System.out.println("Ejecutado test correctamente");
	        
		} catch (Exception e) {
			e.printStackTrace();
		}		
	}
}
